BOJ_14503_로봇청소기
브루트포스로 while 문 안에서 청소기를 돌리는 구현 문제
시간 복잡도는 O(MxNx4) 인데 M과 N이 최대 50이기 때문에 대략 10000번의 연산이 일어난다
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
N, M = list(map(int, input().split()))
x, y, d = list(map(int, input().split()))
room = [list(map(int, input().split())) for _ in range(N)]
visited = [[False] * M for _ in range(N)]
cnt = 0
while True:
# 현재 자리 탐색
if not visited[x][y]:
visited[x][y] = True
cnt += 1
# 사방 탐색
flag = False
temp_dir = d
for i in range(1, 5):
temp_dir = 3 if temp_dir - 1 < 0 else temp_dir - 1
nx = x + dx[temp_dir]
ny = y + dy[temp_dir]
if nx < 0 or ny < 0 or nx >= N or ny >= M or room[nx][ny] == 1 or visited[nx][ny]:
continue
x = nx
y = ny
d = temp_dir
flag = True
break
if not flag:
nx = x - dx[d]
ny = y - dy[d]
if nx < 0 or ny < 0 or nx >= N or ny >= M or room[nx][ny] == 1:
break
x = nx
y = ny
print(cnt)